<?php
	App::uses('AppModel', 'Model'); // giống import

	class User extends AppModel {

		public $validate = array(

			'first_name' => array( // chỉ có 1 luật (rule) kiểm tra
				'rule' => array('minLength', '2'), // kiểm tra độ dài tối thiểu
				'required' => true, // bắt buộc
				'message' => 'User.validation.firstname.minLength',
			),
			'last_name' => array( // chỉ có 1 luật (rule) kiểm tra
				'rule' => array('minLength', '2'), // kiểm tra độ dài tối thiểu
				'required' => true,
				'message' => 'User.validation.lastname.minLength',
			),
			'email' => array( // chỉ có 1 luật (rule) kiểm tra
				'rule' => 'email', // kiểm tra email hợp lệ
				'required' => true,
				'message' => 'User.validation.email.email',
			),

			// nhiều array con

			'username' => array( // nhiều luật (rule) kiểm tra
				'minLength' => array( // tên này (minLength) do mình đặt, theo camelCase
					'rule' => array('minLength', '8'), // kiểm tra độ dài tối thiểu
					'required' => true,
					'message' => 'User.validation.username.minLength',
				),
				'alphaNumeric' => array( // tên này (alphaNumeric) do mình đặt
					'rule' => 'alphaNumeric', // kiểm tra độ dài tối thiểu
					'message' => 'User.validation.username.alphaNumeric',
				),
			),

			'password' => array(
				'minLength' => array(
					'rule' => array('minLength', '8'),
					'required' => true,
					'message' => 'User.validation.password.minLength',
					'on' => 'create', // chỉ validate khi tạo User,
				),
			),

			'dob' => array(
			    'rule' => 'birthdayValidation',
			    'message' => 'User.validation.dob.invalid',
			),
		);

		function updateLastLoginDemo($id) { // Ham này demo kiem tra neu ko co day du data se bao loi ko cho update vao bang user.

			$user = array(
				'id' => $id,
				'last_login' => date('Y-m-d H:i:s'), // ngày giờ hiện tại theo SQL format
			);
			$this->set($user);
			Debug($this->invalidFields());
			return $this->save(); // trả về false nếu không update được
		}

		function updateLastLogin($id) {

			// date_default_timezone_set("Asia/Bangkok");   // set timezone chinh xac ngay h
            // vào cấu hình của project /app/Config/core.php, Khoảng dòng 272, bỏ comment: //date_default_timezone_set('UTC');

			$user = array(
				'id' => $id,
				'last_login' => date('Y-m-d H:i:s'), // ngày giờ hiện tại theo SQL format
			);
			$this->set($user);
			return $this->save(null, false); // trả về false nếu không update được
		}

		function birthdayValidation() {

	    	$diff = time() - strtotime($this->data['User']['dob']); // giờ hiện tại - giờ ngày sinh

		    if ($diff > 0) { // số milisecond dương mới làm tiếp, nếu âm thì là ngày sinh lớn hơn ngày hiện tại rồi
		        $age = $diff / (24 * 60 * 60 * 365);
		        if ($age > 10) { // trên 10 tuổi => ok, let's go
		            return true;
		        }
		    }
	    	return false;
		}

		function beforeSave($options = array()) {

		    if (!empty($this->data['User']['password']))
		        $this->data['User']['password'] = Security::hash($this->data['User']['password'], null, true);

		    return true;
		}
	}